<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    //axios的拦截器原理

    function axios () {
      //axios默认返回成功的promise实例
      let promise = Promise.resolve(); //模拟一个成功的axios请求

      //因为可能要配置很多个拦截器，所以我们找一个数组，把所有的拦截器回调函数保存起来
      const arr = [];

      //1.遍历所有的请求拦截器，把请求拦截器回调函数放在数组中
      //假设所有的请求拦截器都在requestInterceptor对象上
      for (let item in requestInterceptor) {
        //每个拦截器都有处理成功和失败的两个函数fufilledFn rejectedFn
        arr.unshift(item.fufilledFn, item.rejectedFn);
      }

      //遍历所有的响应拦截器，把所有的响应拦截器回调函数放在数组中
      for (let item in responseInterceptor) {
        arr.push(item.fufilledFn, item.rejectedFn);
      }

      //此时axios开始执行自己的拦截器了。。。。
      while (arr.length > 0) {
        promise = promise.then(arr.shift(), arr.shift());
      }
    }

  </script>
</body>

</html>